package com.gitee.secretopen.plugin.model;

import com.gitee.secretopen.plugin.observer.Observer;
import com.gitee.secretopen.plugin.observer.Observerable;

import java.util.ArrayList;
import java.util.List;

/**
 * 　@description: 插件信息实体类，被观察者，内部实现了观察者模式，在启用json文件情况下会自动更新json文件
 * 　@author secret
 * 　@date 2021/1/28 14:04
 *
 */
public class PluginModel implements Observerable {

    //注意到这个List集合的泛型参数为Observer接口，设计原则：面向接口编程而不是面向实现编程
    private List<Observer> list;
    /**
     * 插件类名
     */
    private String className;
    /**
     * 插件名称
     */
    private String name;

    /**
     * 插件是否有自定义设置功能
     * 默认false:没有
     */
    private boolean hasSetup=false;

    /**
     * 插件状态
     * 默认true:开启
     */
    private boolean isEnabled=true;


    public PluginModel() {
        list = new ArrayList<Observer>();
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isHasSetup() {
        return hasSetup;
    }

    public void setHasSetup(boolean hasSetup) {
        this.hasSetup = hasSetup;
    }

    public boolean isEnabled() {
        return isEnabled;
    }

    public void setEnabled(boolean enabled) {
        isEnabled = enabled;
        //通知观察者
        notifyObserver();
    }

    /**
     * 注册观察者
     * @param o
     */
    @Override
    public void registerObserver(Observer o) {
        list.add(o);
    }

    /**
     * 移除观察者
     * @param o
     */
    @Override
    public void removeObserver(Observer o) {
        if(!list.isEmpty()) {
            list.remove(o);
        }
    }

    @Override
    public void notifyObserver() {
        for(int i = 0; i < list.size(); i++) {
            Observer oserver = list.get(i);
            oserver.update("更新json配置文件");
        }
    }
}
